#include "rclcpp/rclcpp.hpp"

using namespace std::chrono_literals;

class PublisherNode : public rclcpp::Node {
public:
  PublisherNode(std::string name) : Node(name) {
    RCLCPP_INFO(this->get_logger(), "node: %s is created", name.c_str());
  }
  void handle() {
    while (true) {
      rclcpp::sleep_for(500ms);
      RCLCPP_INFO(this->get_logger(), "hello world");
    }
  }

  void start() {
    // 当有持续的工作需要进行时，需要开启新的线程，防止主线程无法即使响应其他请求
    std::thread{std::bind(&PublisherNode::handle, this)}.detach();
  }
};

int main(int argc, char **argv) {
  // 初始化ros2的C++接口
  rclcpp::init(argc, argv);
  // 建立节点对象
  auto node = std::make_shared<PublisherNode>("robot_upstart_restart_node");
  node->start();
  // 运行节点，检测退出信号
  rclcpp::spin(node);
  // 销毁节点并关闭C++接口
  rclcpp::shutdown();

  return 0;
}